package com.xinggq.common.utils;

import com.xinggq.common.exception.AbstractCommonException;
import org.springframework.util.StringUtils;


/**
 * 参数校验工具类
 * 提供类似Apache Commons Lang3 Validate的功能，但抛出自定义异常
 *
 * @author xinggq
 * @since 2024-01-01
 */
public final class Validate {

  private Validate() {
    throw new UnsupportedOperationException("工具类不允许实例化");
  }

  // ========== 基础校验方法 ==========

  /**
   * 校验表达式为true，否则抛出异常
   */
  public static void isTrue(boolean expression, String message) {
    if (!expression) {
      throw AbstractCommonException.paramError(message);
    }
  }

  // ========== 对象校验方法 ==========

  /**
   * 校验对象不为null，否则抛出异常
   *
   */
  public static <T> T objectNotNull(T object, String message) {
    if (object == null) {
      throw AbstractCommonException.paramNull(message);
    }
    return object;
  }

  // ========== 字符串校验方法 ==========

  /**
   * 校验字符串不为空（null、空字符串、只包含空白字符），否则抛出异常
   *
   */
  public static String strNotBlank(String str, String message) {
    if (!StringUtils.hasText(str)) {
      throw AbstractCommonException.paramNull(message);
    }
    return str;
  }


  public static void strMatch(String str, String regex, String msg) {
    if (!str.matches(regex)) {
      throw AbstractCommonException.paramError(msg);
    }
  }
}